.\" Copyright (c) 2009 Ed Schouten <ed@FreeBSD.org>
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"
.Dd February 5, 2022
.Dt UTEMPTER_ADD_RECORD 3UTEMPTER
.Os
.Sh NAME
.Nm utempter_add_record ,
.Nm utempter_remove_added_record ,
.Nm utempter_remove_record ,
.Nm addToUtmp ,
.Nm removeFromUtmp ,
.Nm removeLineFromUtmp
.Nd utempter compatibility interface
.Sh LIBRARY
.Lb libutempter
.Sh SYNOPSIS
.In utempter.h
.Ft int
.Fn utempter_add_record "int fd" "const char *host"
.Ft int
.Fn utempter_remove_added_record "void"
.Ft int
.Fn utempter_remove_record "int fd"
.Ft void
.Fn addToUtmp "const char *pty" "const char *host" "int fd"
.Ft void
.Fn removeFromUtmp "void"
.Ft void
.Fn removeLineFromUtmp "const char *pty" "int fd"
.Sh DESCRIPTION
These functions provide an interface for terminal emulators such as tmux,
screen, and xterm to record user sessions to
.Xr utmpx 5
database.
Note that they are best effort and may not succeed.
If consumers need to know for certain that they have successfully updated the
.Xr utmpx 5
database, these functions should not be used because they cannot communicate
that for compatibility reasons.
.Pp
The
.Fn utempter_add_record
and
.Fn addToUtmp
functions add a login record to the
.Xr utmpx 5
database for the TTY belonging to the pseudo-terminal manager file descriptor
.Fa fd ,
using the username corresponding with the real user ID of the calling
process and the optional hostname
.Fa host ,
limited to 256 characters, that is the size of
.Va ut_host
member of
.Vt struct utmpx
minus terminating NUL character.
.Pp
The
.Fn utempter_remove_record
and
.Fn removeLineFromUtmp
functions mark the login session as being closed for the TTY belonging
to the pseudo-terminal manager file descriptor
.Fa fd .
.Pp
The
.Fn utempter_remove_added_record
and
.Fn removeFromUtmp
functions have the same properties as the previously mentioned
functions, except that they use an internally cached value of the file
descriptor passed to
.Fn utempter_add_record
and
.Fn addToUtmp .
.Pp
In this implementation, the
.Fa pty
arguments of
.Fn addToUtmp
and
.Fn removeLineFromUtmp
are ignored, and database entries are driven entirely by the
.Fa fd
argument.
.Sh RETURN VALUES
The
.Fn utempter_add_record ,
.Fn utempter_remove_added_record
and
.Fn utempter_remove_record
functions always return a value of 0.
.Sh INTERFACE STABILITY
.Fn utempter_add_record ,
.Fn utempter_remove_added_record ,
and
.Fn utempter_remove_record
are
.Sy Committed .
.Fn addToUtmp ,
.Fn removeFromUtmp ,
and
.Fn removeLineFromUtmp
are
.Sy Obsolete Committed .
.Sh MT-LEVEL
.Sy Unsafe
.Sh SEE ALSO
.Xr pututxline 3c ,
.Xr utmpx 3head ,
.Xr utmpx 5
